﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;
using BYGamesDLL;

namespace BYGamesBLL
{
    public class ProdutoDAO : DAO<Produto>
    {
        protected SqlConnection con;
        protected SqlCommand cmd;
        private static ProdutoDAO instance = null;

        private ProdutoDAO(string conexao)
        {
            con = new SqlConnection(conexao);
            cmd = new SqlCommand("",con);
        }

        public static ProdutoDAO GetInstance(string conexao)
        {
            if (instance == null)
            {
                instance = new ProdutoDAO(conexao);
            }
            return instance;
        }

        public void Inserir(Produto objeto)
        {
            cmd.CommandText = "INSERT INTO produto (nome, desc_breve, desc_comp, valor, fotos, qtd, status) values " +
                "('" + objeto.Nome + "','" + objeto.DescBreve + "','" + objeto.DescCompleta + "'," +
                objeto.Valor + ",'" + Sistema.Implode(objeto.Fotos) + "'," + objeto.QtdEstoque + "," + ((objeto.Status) ? 1 : 0) + ")";
            con.Open();
            cmd.ExecuteReader();
            con.Close();
        }

        public void Remover(Produto objeto)
        {
            cmd.CommandText = "DELETE FROM produto WHERE id = " + objeto.Id;
            con.Open();
            cmd.ExecuteReader();
            con.Close();
        }

        public void Atualizar(Produto objeto)
        {
            cmd.CommandText = "UPDATE produto SET nome = '" + objeto.Nome + "', desc_breve = '" + objeto.DescBreve + "', desc_comp = '" + objeto.DescCompleta + "', valor = " +
                objeto.Valor + ", fotos = '" + Sistema.Implode(objeto.Fotos) + "', qtd = " + objeto.QtdEstoque + ", status = " + ((objeto.Status) ? 1 : 0) + ", WHERE id = " + objeto.Id;
            con.Open();
            cmd.ExecuteReader();
            con.Close();
        }

        public Produto Get(int id)
        {
            Produto p = new Produto();
            cmd.CommandText = "SELECT * FROM produto WHERE id = " + id;
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            while (r.Read())
            {
                p.Id = Convert.ToInt32(r["id"]);
                p.Nome = Convert.ToString(r["nome"]);
                p.DescBreve = Convert.ToString(r["desc_breve"]);
                p.DescCompleta = Convert.ToString(r["desc_comp"]);
                p.Valor = Convert.ToInt32(r["valor"]);
                string strFotos = Convert.ToString(r["fotos"]);
                List<string> lstFotos = Sistema.Explode(strFotos);
                p.Fotos.AddRange(lstFotos);
                p.QtdEstoque = Convert.ToInt32(r["qtd"]);
                p.Status = Convert.ToBoolean(r["status"]);
            }
            r.Close();
            con.Close();
            return p;
        }

        public List<Produto> GetAll()
        {
            cmd.CommandText = "SELECT * FROM produto";
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            List<Produto> produtos = new List<Produto>();
            while (r.Read())
            {
                Produto p = new Produto();
                p.Id = Convert.ToInt32(r["id"]);
                p.Nome = Convert.ToString(r["nome"]);
                p.DescBreve = Convert.ToString(r["desc_breve"]);
                p.DescCompleta = Convert.ToString(r["desc_comp"]);
                p.Valor = Convert.ToInt32(r["valor"]);
                string strFotos = Convert.ToString(r["fotos"]);
                List<string> lstFotos = Sistema.Explode(strFotos);
                p.Fotos.AddRange(lstFotos);
                p.QtdEstoque = Convert.ToInt32(r["qtd"]);
                p.Status = Convert.ToBoolean(r["status"]);
                produtos.Add(p);
            }
            r.Close();
            con.Close();
            return produtos;
        }

    }
}
